﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Serialization;
using System.Runtime.Serialization.Formatters.Soap;
using System.IO;
using MainScene;
using MindFusion.Diagramming.Layout;
using MindFusion.Diagramming.WinForms;
using MindFusion.Diagramming;
using System.Runtime.Serialization.Formatters.Binary;
using MindFusion.Drawing;


namespace SSShell
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
            //ошибка из-за уже использованного ключа IconNode
            //MindFusion.Diagramming.Diagram.RegisterItemClass(typeof(IconNode), "IconNode", 1);

            // Let users draw IconNode objects
            diagramView1.CustomNodeType = typeof(IconNode);
            //diagramView1.Behavior = Behavior.Custom;
            diagramView1.Behavior = Behavior.Modify;
            diagram1.ShapeHandlesStyle = HandlesStyle.Invisible;
            diagram2.ShowDisabledHandles = false;
            diagram2.Selection.Style = SelectionStyle.Frame;
            toolStripComboBox_Zoom.SelectedIndex = 3;
            //Саша 5.11.2011-вызов формы регистрации
            registration forma = new registration(this);
            forma.ShowDialog();
            if (forma.DialogResult == DialogResult.OK)
            {
                MessageBox.Show("Вы зарегистрировались успешно!");
            }
        }

        public ClassSemanticNet SS = new ClassSemanticNet();
        public int Id = 0;
        //Саша-чтобы была возможность редактировать-сохраняем текущую вершину
        public ClassNode currentNodeCN = null;
        public DiagramNode CurrentD2Node = null;
        public DiagramNode currentDNode = null;
        //Саша-5.11.2011-разделение формы доступа-логин и пароль-администратор-admin и то и другое
        public string login = "";
        public string password = "";
        private void diagram1_LinkCreated(object sender, MindFusion.Diagramming.LinkEventArgs e)
        {
            ClassNode node1, node2, curnode;

            textBoxLegend.Text = "Идёт создание ссылки";
            node1 = (ClassNode)e.Link.Origin.Id;
            node2 = (ClassNode)e.Link.Destination.Id;
            curnode = node1;

            if (AllParent(curnode, node2))
            {
                MessageBox.Show("Зацикливание!!!");
                diagram1.Links.Remove(e.Link);
            }
            else
            {
                ((ClassNode)e.Link.Origin.Id).LstNodes.Add((ClassNode)e.Link.Destination.Id);
                ((ClassNode)e.Link.Destination.Id).LstParent.Add((ClassNode)e.Link.Origin.Id);
                e.Link.AllowMoveEnd = false;
                e.Link.AllowMoveStart = false;
                e.Link.TextStyle = LinkTextStyle.Center;
                int y = ((ClassNode)e.Link.Origin.Id).LstNodes.Count;
                e.Link.Text = "#" + y.ToString();
                //Саша-проверка того, что дуга выходит не из вершины-действия
                if (node1.TypeN == TypeNode.Action)
                {
                    MessageBox.Show("Действия ни на что не ссылаются!");
                    diagram1.Links.Remove(e.Link);
                }
                else
                {
                    DiagramLink link_d2 = new DiagramLink(diagram2, GetShapeNodeById(node1), GetShapeNodeById(node2));
                    e.Link.Id = link_d2;
                    link_d2.ShadowOffsetX = link_d2.ShadowOffsetY = 0;
                    link_d2.Text = "#" + y.ToString();
                    diagram2.Links.Add(link_d2);
                }
            }
            SS.IsSaved = false;
            //MessageBox.Show(e.Link.AllowMoveEnd.ToString());


        }

        //---------------------функция проверки на отсутствие цикличности----------------------//
        private bool AllParent(ClassNode curnode, ClassNode lastnode)
        {
            bool result = false;
            if (curnode == lastnode)
                return true;
            foreach (var item in curnode.LstParent)
            {
                result = AllParent(item, lastnode);
            }
            return result;
        }

        private void diagram1_NodeSelected(object sender, MindFusion.Diagramming.NodeEventArgs e)
        {
            lstStatus.Items.Clear();
            lstStatus.Items.Add("Просмотр сети...");
            //Саша-сохранение выделенной вершины
            currentNodeCN = (ClassNode)e.Node.Id;
            currentDNode = e.Node;
            if (((ClassNode)e.Node.Id).TypeN == TypeNode.Action)
            {
                lstViewContent.Items.Clear();
                textBoxLegend.Text = "Идёт просмотр действия";
                lstViewContent.Items.Add("Действие: ");
                lstViewContent.Items.Add("Агент - " + ((ClassNode)e.Node.Id).CaseFrame.Agent.Name);
                lstViewContent.Items.Add("Реципиент - " + ((ClassNode)e.Node.Id).CaseFrame.Recipient.Name);
                lstViewContent.Items.Add("Действие - " + ((ClassNode)e.Node.Id).CaseFrame.ToDo.Name);
                lstViewContent.Items.Add("Место - " + ((ClassNode)e.Node.Id).CaseFrame.Lokotiv.Name);
                lstViewContent.Items.Add("Время - " + ((ClassNode)e.Node.Id).CaseFrame.Time.Name);
                lstViewContent.Items.Add("Объект - " + ((ClassNode)e.Node.Id).CaseFrame.Obj.Name);
            }
            else
            {
                lstViewContent.Items.Clear();
                textBoxLegend.Text = "Идёт просмотр сцены";
                lstViewContent.Items.Add("Сцена: ");
                lstViewContent.Items.Add("Название - " + ((ClassNode)e.Node.Id).Name);
            }
            SS.IsSaved = false;
        }
        private void diagram1_Clicked(object sender, MindFusion.Diagramming.DiagramEventArgs e)
        {
            if (login == "admin" && password == "admin")
            {
                if (e.MouseButton == MouseButton.Left)
                {
                    lstStatus.Items.Clear();
                    textBoxLegend.Text = "Идёт создание новой вершины";
                    lstStatus.Items.Add("Создание новой вершины...");
                    //Саша-в форму передаём ещё несколько параметров
                    AddChangeNode form1 = new AddChangeNode(this, false, currentNodeCN, currentDNode, e.MousePosition.X, e.MousePosition.Y);
                    form1.Tag = SS;
                    //Саша-чтобы форма появлялась рядом с кликом 2.04
                    int xx = (int)Math.Round((decimal)Cursor.Position.X);
                    int yy = (int)Math.Round((decimal)Cursor.Position.Y);
                    Point pp = new Point(xx, yy);
                    form1.Location = pp;
                    //Саша-конец 2.04
                    form1.ShowDialog();
                    //if (form1.DialogResult == DialogResult.Cancel)
                    //diagram1.Nodes.Remove(iconNode);
                    Bitmap tempImage = new Bitmap(1, 1);
                    Graphics graphics = Graphics.FromImage(tempImage);
                    MindFusion.Drawing.IGraphics measureGraphics = new GdiGraphics(graphics);
                    if (form1.DialogResult == DialogResult.OK)
                    {
                        IconNode iconNode;
                        //ShapeNode item = new ShapeNode(diagram1);
                        if (SS.LstNodes[SS.LstNodes.Count - 1].TypeN == TypeNode.Scene)
                        {
                            //item.Bounds = new RectangleF(Bounds.Location, new SizeF(10, 5));
                            //item.Shape = Shapes.Rectangle;
                            //item.Text = "Сцена -" + SS.LstNodes[SS.LstNodes.Count - 1].Name.ToString();
                            //item.Brush = new MindFusion.Drawing.SolidBrush(Color.Ivory);
                            //item.ShadowOffsetX = item.ShadowOffsetY = 0;
                            IconNode iconN = new IconNode();
                            iconN.Text = "Сцена - " + SS.LstNodes[SS.LstNodes.Count - 1].Name.ToString();
                            iconN.ResizeToFitText(FitSize.KeepRatio);
                            SizeF textSize = measureGraphics.MeasureString(iconN.Text, iconN.Font/*,int.MaxValue,iconN.TextFormat*/);
                            iconNode = new IconNode(diagram1, Color.Red, textSize);
                            iconNode.ToolTip = "Сцена - " + SS.LstNodes[SS.LstNodes.Count - 1].Name.ToString();
                            iconNode.Text = "Сцена - " + SS.LstNodes[SS.LstNodes.Count - 1].Name.ToString();
                            iconNode.ResizeToFitText(FitSize.KeepRatio);
                            //  iconNode.Locked = true;
                        }
                        else
                        {
                            //item.Bounds = new RectangleF(Bounds.Location, new SizeF(5, 5));
                            //item.Shape = Shapes.Ellipse;
                            //item.Text = "Действие -" + SS.LstNodes[SS.LstNodes.Count - 1].CaseFrame.ToDo.Name.ToString();
                            //item.Brush = new MindFusion.Drawing.SolidBrush(Color.Coral);
                            //item.ShadowOffsetX = item.ShadowOffsetY = 0;
                            IconNode iconN = new IconNode();
                            iconN.Text = "Действие - " + SS.LstNodes[SS.LstNodes.Count - 1].CaseFrame.ToDo.Name.ToString();
                            iconN.ResizeToFitText(FitSize.KeepRatio);
                            SizeF textSize = measureGraphics.MeasureString(iconN.Text, iconN.Font);
                            iconNode = new IconNode(diagram1, Color.Green, textSize);
                            iconNode.ToolTip = "Действие - " + SS.LstNodes[SS.LstNodes.Count - 1].CaseFrame.ToDo.Name.ToString();
                            iconNode.Text = "Действие - " + SS.LstNodes[SS.LstNodes.Count - 1].CaseFrame.ToDo.Name.ToString();
                            iconNode.ResizeToFitText(FitSize.KeepRatio);
                            //  iconNode.Locked = true;
                        }
                        //diagram1.Nodes.Add(item);
                        //item.Move(e.MousePosition.X, e.MousePosition.Y);
                        //item.Id = SS.LstNodes[SS.LstNodes.Count - 1];
                        diagram1.Nodes.Add(iconNode);
                        iconNode.Move(e.MousePosition.X, e.MousePosition.Y);
                        iconNode.Id = SS.LstNodes[SS.LstNodes.Count - 1];
                        SS.LstNodes[SS.LstNodes.Count - 1].X = SS.LstNodes[SS.LstNodes.Count - 1].X_d2 = e.MousePosition.X;
                        SS.LstNodes[SS.LstNodes.Count - 1].Y = SS.LstNodes[SS.LstNodes.Count - 1].Y_d2 = e.MousePosition.Y;
                        //на вторую диаграмму
                        Add_to_LookDiagram(SS.LstNodes[SS.LstNodes.Count - 1]);
                        //iconNode.TextColor = Color.Black;
                    }
                    lstStatus.Items.Clear();
                    textBoxLegend.Text = "Просмотр сети";
                    lstStatus.Items.Add("Просмотр сети...");
                    SS.IsSaved = false;
                }
                else
                    if (e.MouseButton == MouseButton.Right)
                    {
                        currentMousePosition = e.MousePosition;
                        int x = (int)Math.Round((decimal)Cursor.Position.X);
                        int y = (int)Math.Round((decimal)Cursor.Position.Y);
                        Point p = new Point(x, y);
                        // ct.Show(p);
                        contextMenuStripDiagram1.Show(p);
                    }
                RebuildTaxonScen();
            }
        }

        private void Add_to_LookDiagram(ClassNode node)
        {
            float x = node.X_d2, y = node.Y_d2;
            ShapeNode item = new ShapeNode(diagram2);
            ShapeNode item_case;
            DiagramLink link;
            item.Id = node;
            item.Tag = "ClassNode";
            item.Bounds = new RectangleF(x, y, 10, 5);
            item.Shape = Shapes.Rectangle;
            item.Text = node.Name;
            item.ResizeToFitText(FitSize.KeepRatio);
            item.Brush = new MindFusion.Drawing.SolidBrush(Color.BlueViolet);
            item.ShadowOffsetX = item.ShadowOffsetY = 0;
            diagram2.Nodes.Add(item);
            if (node.TypeN == TypeNode.Action)
            {
                List<ClassCase> allcase = new List<ClassCase>() { node.CaseFrame.Agent, node.CaseFrame.Recipient, 
                    node.CaseFrame.ToDo, node.CaseFrame.Lokotiv, node.CaseFrame.Obj, node.CaseFrame.Time};
                List<string> allcaseName = new List<string>() { "#агент", "#реципиент", "#действие", "#локатив",
                    "#объект", "#время"};
                int i = 0;
                foreach (ClassCase clcase in allcase)
                {
                    if (clcase.Name.Trim() != "")
                    {
                        item_case = GetShapeNodeById_Case(clcase);
                        if (item_case == null)
                        {
                            item_case = new ShapeNode(diagram2);
                            item_case.Id = clcase;
                            item_case.Tag = "ClassCase";
                            item_case.Bounds = new RectangleF(clcase.X_d2, clcase.Y_d2, 10, 5);
                            item_case.Shape = Shapes.Ellipse;
                            item_case.Text = clcase.Name.Trim();
                            item_case.ResizeToFitText(FitSize.KeepRatio);
                            item_case.Brush = new MindFusion.Drawing.SolidBrush(Color.CadetBlue);
                            item_case.ShadowOffsetX = item_case.ShadowOffsetY = 0;
                            diagram2.Nodes.Add(item_case);
                        }
                        link = new DiagramLink(diagram2, item, item_case);
                        link.Text = allcaseName.ElementAt<string>(i);
                        link.AllowMoveEnd = link.AllowMoveStart = false;
                        link.ShadowOffsetX = link.ShadowOffsetY = 0;
                        diagram2.Links.Add(link);
                    }
                    i++;
                }
            }
        }
        //опять end Ирина 28.03
        //Саша-при удалении дуги-убираем потомка и убираем родителя
        //при удалении вершины сначала удаляется связь-если она есть, а потом сама вершина
        private void diagram1_LinkDeleted(object sender, LinkEventArgs e)
        {

            textBoxLegend.Text = "";
            ((ClassNode)e.Link.Origin.Id).LstNodes.Remove((ClassNode)e.Link.Destination.Id);
            ((ClassNode)e.Link.Destination.Id).LstParent.Remove((ClassNode)e.Link.Origin.Id);
            diagram2.Links.Remove((DiagramLink)e.Link.Id);
            RebuildTaxonScen();
            SS.IsSaved = false;

        }
        //Саша-при удалении вершины она автоматически не удаляется из семсети-поэтому возникало исключение!!
        private void diagram1_NodeDeleted(object sender, NodeEventArgs e)
        {

            textBoxLegend.Text = "";
            ShapeNode Shnode = GetShapeNodeById((ClassNode)e.Node.Id);
            DiagramLinkCollection allLink = Shnode.GetAllLinks();
            foreach (DiagramLink item in allLink)
            {
                if (item.Destination.GetAllLinks().Count == 1)
                {
                    diagram2.Nodes.Remove(item.Destination);
                }
                diagram2.Links.Remove(item);
            }
            diagram2.Nodes.Remove(Shnode);
            SS.LstNodes.Remove((ClassNode)e.Node.Id);
            RebuildTaxonScen();
            SS.IsSaved = false;

        }

        private void генерироватьТекстToolStripMenuItem2_Click(object sender, EventArgs e)
        {
            textBoxLegend.Text = "";
            bool error = false;
            bool exist = false;
            ClassNode CurNode;
            ClassNode StartNode = new ClassNode();
            lstStatus.Items.Clear();
            lstStatus.ForeColor = Color.Red;
            foreach (DiagramNode item in diagram1.Nodes)
            {
                if (((ClassNode)item.Id).TypeN == TypeNode.Scene)
                    ((IconNode)item).ColOfNode = Color.Red;
                else
                    ((IconNode)item).ColOfNode = Color.Green;
            }
            foreach (DiagramNode item in diagram1.Nodes)
            {
                CurNode = (ClassNode)item.Id;
                if (CurNode.TypeN == TypeNode.Scene)
                {
                    if (CurNode.LstNodes.Count == 0)
                    {
                        lstStatus.Items.Add("Сцена с именем " + CurNode.Name + " не ссылается на действия.");
                        IconNode fg = (IconNode)item;
                        fg.ColOfNode = Color.HotPink;
                        error = true;
                    }
                    if (CurNode.LstParent.Count == 0)
                        if (!exist)
                        {
                            StartNode = CurNode;
                            exist = true;
                        }
                        else
                        {
                            lstStatus.Items.Add("Сцена с именем " + CurNode.Name + " не связана с сетью.");
                            IconNode fg = (IconNode)item;
                            fg.ColOfNode = Color.HotPink;
                            error = true;
                        }
                }
                else
                    if (CurNode.LstParent.Count == 0)
                    {
                        lstStatus.Items.Add("На действие " + CurNode.CaseFrame.ToDo.Name + " не ссылаются сцены.");
                        IconNode fg = (IconNode)item;
                        fg.ColOfNode = Color.LawnGreen;
                        error = true;
                    }
            }
            if (error)
            {
                MessageBox.Show("Сеть заполнена некорректно!!!");
                diagramView1.Refresh();
                return;
            }
            else
                lstStatus.Items.Add("Ошибок нет...");
            lstStatus.ForeColor = Color.Black;
            MLV myMLV = new MLV(StartNode, SS.Taxon);
            myMLV.GoRoundOfScene(StartNode.Name);
            txtFairyTale.Text = myMLV.Fairytale;
            txtFairyTale.SelectionStart = 0;
            txtFairyTale.SelectionLength = 0;
            //Cаша-14.04-добавили новую вкладку таксономии- переход после генерации
            tabControl1.SelectedIndex = 3;
            //саша-end
        }
        //Саша-чтобы правильно появлялось окно, если по кнопке кликаем 3.04
        bool is_Redact_context = false;
        //Саша-каонец 3.04
        //Саша-кнопка редактирования-хотя в name-btnedit
        private void button1_Click(object sender, EventArgs e)
        {
            if (login == "admin" && password == "admin")
            {
                //Саша-проверка что выделена какая-то вершина 4.04
                if (currentNodeCN != null)
                {
                    //саша-конец-в конце добавлена скобка)) 4.04
                    lstViewContent.Items.Clear();
                    AddChangeNode form1 = new AddChangeNode(this, true, currentNodeCN, currentDNode, currentNodeCN.X_d2, currentNodeCN.Y_d2);
                    form1.Tag = SS;
                    if (is_Redact_context)
                    {
                        //Саша-чтобы форма появлялась рядом с кликом 2.04
                        int xx = (int)Math.Round((decimal)Cursor.Position.X);
                        int yy = (int)Math.Round((decimal)Cursor.Position.Y);
                        Point pp = new Point(xx, yy);
                        form1.Location = pp;
                    }
                    else
                        form1.StartPosition = FormStartPosition.CenterScreen;
                    //Саша-конец 2.04
                    form1.ShowDialog();

                    if (form1.DialogResult == DialogResult.OK)
                    {
                        lstViewContent.Items.Clear();
                        if (currentNodeCN.TypeN == TypeNode.Action)
                        {
                            lstViewContent.Items.Clear();
                            lstViewContent.Items.Add("Агент " + currentNodeCN.CaseFrame.Agent.Name);
                            lstViewContent.Items.Add("Реципиент " + currentNodeCN.CaseFrame.Recipient.Name);
                            lstViewContent.Items.Add("Действие " + currentNodeCN.CaseFrame.ToDo.Name);
                            lstViewContent.Items.Add("Место " + currentNodeCN.CaseFrame.Lokotiv.Name);
                            lstViewContent.Items.Add("Время " + currentNodeCN.CaseFrame.Time.Name);
                            lstViewContent.Items.Add("Объект " + currentNodeCN.CaseFrame.Obj.Name);
                        }
                        else
                        {
                            lstViewContent.Items.Clear();
                            lstViewContent.Items.Add("Название " + currentNodeCN.Name);
                        }
                        RebuildTaxonScen();
                    }
                }

            }
            else
            {
                MessageBox.Show("Вы не обладаете правами администратора!", "Ошибка",
                            MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        //------------------------бинарная сериализация в файл--------------------------------------------------------------------
        private bool SerializeToFile(string nameOfFile)
        {
            try
            {
                var bFormat = new BinaryFormatter();
                var fStream = new FileStream(nameOfFile, FileMode.Create);
                var lst = new List<ClassSemanticNet> { SS };
                bFormat.Serialize(fStream, lst);
                fStream.Close();
                SS.IsSaved = true;
                return true;
            }
            catch
            {
                MessageBox.Show("Произошла ошибка при сохранении файла", "Внимание!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            return false;
        }

        private bool SerializeFromFile(string nameOfFile)
        {
            try
            {
                var bFormat = new BinaryFormatter();
                var fStream = new FileStream(nameOfFile, FileMode.Open);
                SS = ((List<ClassSemanticNet>)bFormat.Deserialize(fStream))[0];
                fStream.Close();
                VisualFromStructure();
            }
            catch
            {
                MessageBox.Show("Произошла ошибка при сохранении файла", "Внимание!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            return false;
        }

        private void сохранитьToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (SS.FileName == "")
                сохранитьКакToolStripMenuItem_Click(sender, e);
            else SerializeToFile(SS.FileName);
            SS.IsSaved = true;
        }

        private void сохранитьКакToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SaveFileDialog sfd = new SaveFileDialog { Filter = @"Семантическая сеть|*.sn" };
            sfd.InitialDirectory = Application.StartupPath;
            if (sfd.ShowDialog() == DialogResult.OK)
                SS.FileName = sfd.FileName;
            else return;
            SerializeToFile(SS.FileName);
            SS.IsSaved = true;
        }

        private void открытьToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (!SS.IsSaved)
            {
                DialogResult IsClaimSave = MessageBox.Show("Сохранить текущую семантическую сеть?", "Внимание!",
                    MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                if (IsClaimSave == DialogResult.Yes)
                {
                    if (SS.FileName == "")
                    {
                        SaveFileDialog sfd = new SaveFileDialog { Filter = @"Семантическая сеть|*.sn" };
                        sfd.InitialDirectory = Application.StartupPath;
                        if (sfd.ShowDialog() == DialogResult.OK)
                            SS.FileName = sfd.FileName;
                        else return;
                    }
                    if (!SerializeToFile(SS.FileName))
                        return;//произошла ошибка при сериализации=>отменяем всю операцию
                }
            }
            SS.Clear();
            OpenFileDialog ofdial = new OpenFileDialog { Filter = @"Семантическая сеть|*.sn" };
            ofdial.InitialDirectory = Application.StartupPath;
            if (ofdial.ShowDialog() != DialogResult.OK)
                return;
            SS.FileName = ofdial.FileName;
            SerializeFromFile(SS.FileName);
            SS.FileName = ofdial.FileName;
            SS.IsSaved = true;
        }
        //========================бинарная сериализация в файл=======================================================================

        //------------------------Создание новой сем.сети----------------------------------------------------------------------------
        private void создатьToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (!SS.IsSaved)
            {
                DialogResult IsClaimSave = MessageBox.Show("Сохранить текущую семантическую сеть?", "Внимание!",
                    MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                if (IsClaimSave == DialogResult.Yes)
                {
                    if (SS.FileName == "")
                    {
                        SaveFileDialog sfd = new SaveFileDialog { Filter = @"Семантическая сеть|*.sn" };
                        sfd.InitialDirectory = Application.StartupPath;
                        if (sfd.ShowDialog() == DialogResult.OK)
                            SS.FileName = sfd.FileName;
                        else return;
                    }
                    if (!SerializeToFile(SS.FileName))
                        return;//произошла ошибка при сериализации=>отменяем всю операцию
                }
            }
            SS.Clear();
            VisualFromStructure();
            SS.IsSaved = true;
        }
        //========================Создание новой сем.сети============================================================================

        //------------------------Загрузка информации из структуры сем.сети на форму-------------------------------------------------
        public IconNode GetIconNodeById(ClassNode Node)
        {
            foreach (IconNode IcNode in diagram1.Nodes)
            {
                if (IcNode.Id == Node)
                    return IcNode;
            }
            return null;
        }

        public ShapeNode GetShapeNodeById(ClassNode Node)
        {
            foreach (ShapeNode ShNode in diagram2.Nodes)
            {
                if (ShNode.Id == Node)
                    return ShNode;
            }
            return null;
        }

        public ShapeNode GetShapeNodeById_Case(ClassCase Node)
        {
            foreach (ShapeNode ShNode in diagram2.Nodes)
            {
                if ((string)ShNode.Tag == "ClassCase" && ((ClassCase)ShNode.Id) == (Node))
                    return ShNode;
            }
            return null;
        }

        private void VisualFromStructure()
        {
            txtFairyTale.Text = "";
            lstStatus.Items.Clear();
            lstViewContent.Items.Clear();
            diagram1.Nodes.Clear();
            diagram1.Links.Clear();
            treeViewTaxonomia.Nodes.Clear();
            float x = 20;
            float y = 20;
            foreach (ClassNode node in SS.LstNodes)
            {
                IconNode iconNode;
                Bitmap tempImage = new Bitmap(1, 1);
                Graphics graphics = Graphics.FromImage(tempImage);
                MindFusion.Drawing.IGraphics measureGraphics = new GdiGraphics(graphics);

                if (node.TypeN == TypeNode.Scene)
                {
                    IconNode iconN = new IconNode();
                    iconN.Text = "Сцена - " + node.Name.ToString();
                    iconN.ResizeToFitText(FitSize.KeepRatio);
                    SizeF textSize = measureGraphics.MeasureString(iconN.Text, iconN.Font);
                    iconNode = new IconNode(diagram1, Color.Red, textSize);
                    iconNode.ToolTip = "Сцена - " + node.Name.ToString();
                    iconNode.Text = "Сцена - " + node.Name.ToString();
                    iconNode.ResizeToFitText(FitSize.KeepRatio);
                    // iconNode.TextFormat.
                    // iconNode.Locked = true;
                }
                else
                {
                    IconNode iconN = new IconNode();
                    iconN.Text = "Действие - " + node.CaseFrame.ToDo.Name.ToString();
                    iconN.ResizeToFitText(FitSize.KeepRatio);
                    SizeF textSize = measureGraphics.MeasureString(iconN.Text, iconN.Font);
                    iconNode = new IconNode(diagram1, Color.Green, textSize);
                    iconNode.ToolTip = "Действие - " + node.CaseFrame.ToDo.Name.ToString();
                    iconNode.Text = "Действие - " + node.CaseFrame.ToDo.Name.ToString();
                    iconNode.ResizeToFitText(FitSize.KeepRatio);
                    //  iconNode.Locked = true;
                }
                diagram1.Nodes.Add(iconNode);
                x = node.X;
                y = node.Y;
                iconNode.Move(x, y);
                iconNode.Id = node;
                Add_to_LookDiagram(node);
                //x = x == y ? x + 20 : x;
                //y = y+10;
            }


            foreach (ClassNode node in SS.LstNodes)
            {
                if (node.TypeN == TypeNode.Scene)
                {
                    foreach (ClassNode child in node.LstNodes)
                    {
                        DiagramLink newLink = new DiagramLink(diagram1, GetIconNodeById(node), GetIconNodeById(child));
                        newLink.AllowMoveEnd = false;
                        newLink.AllowMoveStart = false;
                        newLink.TextStyle = LinkTextStyle.Center;
                        int yy = ((ClassNode)newLink.Origin.Id).LstNodes.IndexOf((ClassNode)newLink.Destination.Id) + 1;
                        newLink.Text = "#" + yy.ToString();
                        diagram1.Links.Add(newLink);
                        DiagramLink link_d2 = new DiagramLink(diagram2, GetShapeNodeById(node), GetShapeNodeById(child));
                        newLink.Id = link_d2;
                        link_d2.Text = "#" + yy.ToString();
                        link_d2.ShadowOffsetX = link_d2.ShadowOffsetY = 0;
                        diagram2.Links.Add(link_d2);
                    }
                }
            }
            //Саша-14.04 при открытии заполняется дерево таксономии


            foreach (Role item in SS.Taxon.Roles)
            {
                treeViewTaxonomia.Nodes.Add(new TreeNode(item.Name));
                // TreeNode node = new TreeNode(item.Name);

                foreach (string hero in item.Heroes)
                {
                    treeViewTaxonomia.Nodes[SS.Taxon.Roles.IndexOf(item)].Nodes.Add(hero);
                    //   node.Nodes.Add(hero);

                }

            }
            treeViewTaxonomia.ExpandAll();
            //Саша-14.04 end
            //Саша-13.11 при открытии заполняется дерево таксономии сцен
            RebuildTaxonScen();
            //Саша-13.11 end
            diagramView1.Refresh();
        }
        //Саша-13.11 
        public void RebuildTaxonScen()
        {
            ClassNode firstNode = null;
            foreach (ClassNode item in SS.LstNodes)
            {
                if (item.LstParent.Count == 0)
                {
                    firstNode = item;
                    break;
                }
            }
            if (firstNode != null)
            {
                TreeNode trn;
                if (firstNode.TypeN == TypeNode.Scene)
                    trn = new TreeNode(firstNode.Name);
                else
                    trn = new TreeNode(firstNode.CaseFrame.ToDo.Name.ToString());

                foreach (ClassNode item in firstNode.LstNodes)
                {
                    TreeNode tt = new TreeNode(item.Name);
                    trn.Nodes.Add(tt);
                    // treeViewScenes.Nodes[SS.LstNodes.IndexOf(firstNode)].Nodes.Add(new TreeNode());
                }
                treeViewScenes.Nodes.Add(trn);
                SCENETaxon(firstNode.LstNodes, trn);
                treeViewScenes.ExpandAll();
            }
        }
        public void SCENETaxon(List<ClassNode> lst, TreeNode tr)
        {
            int y = 0;
            foreach (ClassNode item in lst)
            {
                if (item.TypeN == TypeNode.Scene)
                {
                    foreach (ClassNode child in item.LstNodes)
                    {
                        if (child.TypeN == TypeNode.Scene)
                        {
                            TreeNode gh = new TreeNode(child.Name);
                            tr.Nodes[y].Nodes.Add(gh);
                            // treeViewScenes.Nodes[item.Name].Nodes.Add(child.Name);
                            SCENETaxon(child.LstNodes, tr.Nodes[y]);
                        }
                        else
                        {
                            TreeNode gh = new TreeNode(child.CaseFrame.ToDo.Name.ToString());
                            tr.Nodes[y].Nodes.Add(gh);
                            //  treeViewScenes.Nodes[item.Name].Nodes.Add(child.CaseFrame.ToDo.Name.ToString());
                        }
                    }
                }
                else
                {
                    TreeNode gh = new TreeNode(item.CaseFrame.ToDo.Name.ToString());
                    tr.Nodes[y].Nodes.Add(gh);
                    //       treeViewScenes.Nodes[lst.IndexOf(item)].Nodes.Add(item.CaseFrame.ToDo.Name.ToString());
                }
                y++;

            }

        }
        //Саша-13.11 end
        //========================Загрузка информации из структуры сем.сети на форму=================================================
        //------------------------Выход из формы-------------------------------------------------------------------------------------
        private void выходToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (!SS.IsSaved)
            {
                DialogResult IsClaimSave = MessageBox.Show("Сохранить текущую семантическую сеть?", "Внимание!",
                    MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                if (IsClaimSave == DialogResult.Yes)
                {
                    if (SS.FileName == "")
                    {
                        SaveFileDialog sfd = new SaveFileDialog { Filter = @"Семантическая сеть|*.sn" };
                        if (sfd.ShowDialog() == DialogResult.OK)
                            SS.FileName = sfd.FileName;
                        else
                        {
                            e.Cancel = true;
                            return;
                        }
                    }
                    if (!SerializeToFile(SS.FileName))
                    {
                        e.Cancel = true;
                        return;//произошла ошибка при сериализации=>отменяем всю операцию
                    }
                }
            }
            if (MessageBox.Show("Вы действительно хотите выйти?", "Внимание!",
                MessageBoxButtons.YesNo, MessageBoxIcon.Information) != DialogResult.Yes)
                e.Cancel = true;//отмена события выхода
        }
        //========================Выход из формы=====================================================================================

        //------------------------XML сериализация в файл----------------------------------------------------------------------------
        private void SerializeToXMLFile(string NameOfFile)
        {
            FileStream FStream = null;
            try
            {
                FStream = new FileStream(NameOfFile, FileMode.Create, FileAccess.Write);
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<ClassSemanticNet>)/*, new Type[] { typeof(ClassSemanticNet), typeof(List<ClassNode>), typeof(List<ClassNode>), typeof(List<ClassNode>) }*/);
                List<ClassSemanticNet> s = new List<ClassSemanticNet>();
                s.Add(SS);
                xmlSerializer.Serialize(FStream, s);
                MessageBox.Show("Сем.сеть сохранена в XML!", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch
            {
                MessageBox.Show("Невозможно сохранить в файл", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                if (FStream != null) FStream.Close();
            }
        }
        private void SerializeFromXMLFile(string NameOfFile)
        {
            FileStream FStream = null;
            try
            {
                FStream = new FileStream(NameOfFile, FileMode.Open, FileAccess.Read);
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<ClassSemanticNet>), new Type[] { typeof(ClassNode) });
                List<ClassSemanticNet> s = new List<ClassSemanticNet>();
                if (FStream.Length != 0)
                    s = (List<ClassSemanticNet>)xmlSerializer.Deserialize(FStream);
                SS = s[0];
                MessageBox.Show("Сем.сеть загружена!", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch
            {
                MessageBox.Show("Невозможно загрузить из файла", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                if (FStream != null) FStream.Close();
            }
        }

        //private void сохранитьВXMLToolStripMenuItem_Click(object sender, EventArgs e)
        //{
        //    SaveFileDialog sfd = new SaveFileDialog { Filter = @"XML файлы|*.xml" };
        //    string str = "";
        //    if (sfd.ShowDialog() == DialogResult.OK)
        //        str = sfd.FileName;
        //    else return;
        //    SerializeToXMLFile(str);
        //}

        //private void загрузитьИзXMLToolStripMenuItem_Click(object sender, EventArgs e)
        //{
        //    if (!SS.IsSaved)
        //    {
        //        DialogResult IsClaimSave = MessageBox.Show("Сохранить текущую семантическую сеть?", "Внимание!",
        //            MessageBoxButtons.YesNo, MessageBoxIcon.Information);
        //        if (IsClaimSave == DialogResult.Yes)
        //        {
        //            if (SS.FileName == "")
        //            {
        //                SaveFileDialog sfd = new SaveFileDialog { Filter = @"Семантическая сеть|*.sn" };
        //                if (sfd.ShowDialog() == DialogResult.OK)
        //                    SS.FileName = sfd.FileName;
        //                else return;
        //            }
        //            if (!SerializeToFile(SS.FileName))
        //                return;//произошла ошибка при сериализации=>отменяем всю операцию
        //        }
        //    }
        //    SS.Clear();
        //    OpenFileDialog ofdial = new OpenFileDialog { Filter = @"XML файлы|*.xml" };
        //    string str = "";
        //    if (ofdial.ShowDialog() == DialogResult.OK)
        //        str = ofdial.FileName;
        //    else return;
        //    SerializeFromXMLFile(str);
        //    VisualFromStructure();
        //}

        //Саша-чтобы нельзя было изменять размер
        private void diagram1_NodeModified(object sender, NodeEventArgs e)
        {
            // e.Node.Locked = true;
            //e.Node.Resize( 5, 5);
            ((ClassNode)e.Node.Id).X = e.MousePosition.X;
            ((ClassNode)e.Node.Id).Y = e.MousePosition.Y;
        }

        private void diagram2_NodeModified(object sender, NodeEventArgs e)
        {
            if ((string)e.Node.Tag == "ClassNode")
            {
                ((ClassNode)e.Node.Id).X_d2 = e.MousePosition.X;
                ((ClassNode)e.Node.Id).Y_d2 = e.MousePosition.Y;
            }
            else
            {
                ((ClassCase)e.Node.Id).X_d2 = e.MousePosition.X;
                ((ClassCase)e.Node.Id).Y_d2 = e.MousePosition.Y;

            }
            SS.IsSaved = false;
        }

        private void diagram1_LinkDeselected(object sender, LinkEventArgs e)
        {
            lstViewContent.Items.Clear();
            textBoxLegend.Text = "";
        }

        private void diagram1_LinkSelected(object sender, LinkEventArgs e)
        {
            textBoxLegend.Text = "Выбрана связь";
            lstViewContent.Items.Clear();
            currentSelectedLink = e.Link;
            ClassNode n1 = (ClassNode)e.Link.Origin.Id;
            ClassNode n2 = (ClassNode)e.Link.Destination.Id;

            if (n1.TypeN == TypeNode.Action)
            {
                lstViewContent.Items.Add("Дуга исходит из действия");
                lstViewContent.Items.Add(n1.CaseFrame.ToDo.Name.ToString());
            }
            else
            {
                lstViewContent.Items.Add("Дуга исходит из сцены");
                lstViewContent.Items.Add(n1.Name.ToString());
            }
            if (n2.TypeN == TypeNode.Action)
            {
                lstViewContent.Items.Add("Дуга входит в действие");
                lstViewContent.Items.Add(n2.CaseFrame.ToDo.Name.ToString());
            }
            else
            {
                lstViewContent.Items.Add("Дуга входит в сцену");
                lstViewContent.Items.Add(n2.Name.ToString());
            }
        }

        private void diagram1_NodeClicked(object sender, NodeEventArgs e)
        {
            if (login == "admin" && password == "admin")
            {
                if (e.MouseButton == MouseButton.Right)
                {
                    //ContextMenuStrip ct = new System.Windows.Forms.ContextMenuStrip();
                    //ct.Items.Add("Редактировать");
                    currentNodeCN = (ClassNode)e.Node.Id;
                    currentDNode = e.Node;
                    if (((ClassNode)e.Node.Id).TypeN == TypeNode.Action)
                    {
                        lstViewContent.Items.Clear();
                        textBoxLegend.Text = "Идёт просмотр действия";
                        lstViewContent.Items.Add("Действие:");
                        lstViewContent.Items.Add("Агент - " + ((ClassNode)e.Node.Id).CaseFrame.Agent.Name);
                        lstViewContent.Items.Add("Реципиент - " + ((ClassNode)e.Node.Id).CaseFrame.Recipient.Name);
                        lstViewContent.Items.Add("Действие - " + ((ClassNode)e.Node.Id).CaseFrame.ToDo.Name);
                        lstViewContent.Items.Add("Место - " + ((ClassNode)e.Node.Id).CaseFrame.Lokotiv.Name);
                        lstViewContent.Items.Add("Время - " + ((ClassNode)e.Node.Id).CaseFrame.Time.Name);
                        lstViewContent.Items.Add("Объект - " + ((ClassNode)e.Node.Id).CaseFrame.Obj.Name);
                    }
                    else
                    {
                        lstViewContent.Items.Clear();
                        textBoxLegend.Text = "Идёт просмотр сцены";
                        lstViewContent.Items.Add("Сцена:");
                        lstViewContent.Items.Add("Название - " + ((ClassNode)e.Node.Id).Name);
                    }
                    int x = (int)Math.Round((decimal)Cursor.Position.X);
                    int y = (int)Math.Round((decimal)Cursor.Position.Y);
                    Point p = new Point(x, y);
                    contextMenuStripNode.Show(p);
                }
            }
            else
            {
                MessageBox.Show("Вы не обладаете правами администратора!", "Ошибка",
                           MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void редактироватьToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (tabControl1.SelectedIndex == 1)
                button1_Click(new object(), null);
            else
            {
                if (login == "admin" && password == "admin")
                {
                    //обработка редактирования вершин на подробной диаграмме
                    if ((string)CurrentD2Node.Tag == "ClassNode")
                    {
                        AddChangeNode form1 = new AddChangeNode(this, true, currentNodeCN, currentDNode, currentNodeCN.X_d2, currentNodeCN.Y_d2);
                        form1.Tag = SS;
                        form1.ShowDialog();
                    }
                    else
                    {
                        ChangeClassCaseNode form1 = new ChangeClassCaseNode(this, CurrentD2Node, CurrentD2Node.GetAllLinks().GetAt(0).Text);
                        form1.Tag = SS;
                        form1.ShowDialog();
                    }
                }
                else
                {
                    MessageBox.Show("Вы не обладаете правами администратора!", "Ошибка",
                           MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void toolStripComboBox_Zoom_SelectedIndexChanged(object sender, EventArgs e)
        {
            short[] zooms = new short[] { 25, 50, 75, 100, 125, 150, 175, 200 };

            if (toolStripComboBox_Zoom.SelectedIndex == -1)
                return;

            diagramView2.ZoomFactor = zooms[toolStripComboBox_Zoom.SelectedIndex];
        }

        private void toolStripButton_Hand_Click(object sender, EventArgs e)
        {
            toolStripButton_Pointer.Checked = false;
            toolStripButton_RedactSS.Checked = false;
            diagramView2.Behavior = Behavior.Pan;
        }

        private void toolStripButton_Pointer_Click(object sender, EventArgs e)
        {
            toolStripButton_Hand.Checked = false;
            toolStripButton_RedactSS.Checked = false;
            diagramView2.Behavior = Behavior.Modify;
        }

        private void toolStripButton_RedactSS_Click(object sender, EventArgs e)
        {
            toolStripButton_Pointer.Checked = false;
            toolStripButton_Hand.Checked = false;
            diagramView2.Behavior = Behavior.DrawLinks;
        }

        private void diagram2_NodeTextEdited(object sender, EditNodeTextEventArgs e)
        {
            if ((string)e.Node.Tag == "ClassNode")
                if (!(((ClassNode)e.Node.Id).TypeN == TypeNode.Action))
                    ((ClassNode)e.Node.Id).Name = e.NewText;

        }

        private void diagram2_NodeTextEditing(object sender, NodeValidationEventArgs e)
        {
            if ((string)e.Node.Tag == "ClassNode")
            {
                if (((ClassNode)e.Node.Id).TypeN == TypeNode.Action)
                    e.Cancel = true;
            }
            else
                e.Cancel = true;
        }

        private void diagram2_NodeClicked(object sender, NodeEventArgs e)
        {
            if (!(toolStripButton_RedactSS.Checked || toolStripButton_Pointer.Checked))
                return;
            if (login == "admin" && password == "admin")
            {
                if (e.MouseButton == MouseButton.Right)
                {
                    CurrentD2Node = e.Node;
                    if ((string)e.Node.Tag == "ClassNode")
                    {
                        currentNodeCN = e.Node.Id as ClassNode;
                        currentDNode = GetIconNodeById(currentNodeCN);
                    }
                    int x = (int)Math.Round((decimal)Cursor.Position.X);
                    int y = (int)Math.Round((decimal)Cursor.Position.Y);
                    Point p = new Point(x, y);
                    contextMenuStripNode.Show(p);
                }
            }
            else
            {
                MessageBox.Show("Вы не обладаете правами администратора!", "Ошибка",
                           MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        public ShapeNode GetCaseNodeByName(string name)
        {
            ShapeNode result = null;
            foreach (DiagramNode item in diagram2.Nodes)
                if ((string)item.Tag == "ClassCase" && ((ShapeNode)item).Text == name)
                {
                    result = (ShapeNode)item;
                }
            return result;
        }
        //from Irene - start, 4.04//
        private float x_contextd2 = 0, y_contextd2 = 0;
        private void diagram2_Clicked(object sender, DiagramEventArgs e)
        {
            //Ирина.s - 26.04
            //if (login == "admin" && password == "admin")
            //{
                if (e.MouseButton == MouseButton.Left)
                {
                    if (!toolStripButton_RedactSS.Checked)
                        return;
                    diagram1_Clicked(sender, e);
                }
                else
                {
                    добавитьВершинуToolStripMenuItem.Enabled = true;
                    int x = (int)Math.Round((decimal)Cursor.Position.X);
                    int y = (int)Math.Round((decimal)Cursor.Position.Y);
                    x_contextd2 = e.MousePosition.X;
                    y_contextd2 = e.MousePosition.Y;
                    Point p = new Point(x, y);
                    if (!toolStripButton_RedactSS.Checked)
                        добавитьВершинуToolStripMenuItem.Enabled = false;
                    contextMenuStrip_Diagram2.Show(p);
                }
      //      }
            //else
            //{
            //    MessageBox.Show("Вы не обладаете правами администратора!", "Ошибка",
            //               MessageBoxButtons.OK, MessageBoxIcon.Error);
            //}

            //Ирина.e - 26.04
        }
        //from Irene - end, 4.04//

        private void diagram2_LinkCreated(object sender, LinkEventArgs e)
        {
            if (!toolStripButton_RedactSS.Checked || tabControl1.SelectedIndex == 1)
                return;
            if ((string)e.Link.Origin.Tag == "ClassCase" || (string)e.Link.Destination.Tag == "ClassCase")
            {
                diagram2.Links.Remove(e.Link);
                return;
            }
            //diagram1_LinkCreated(sender, e);
            ClassNode node1, node2, curnode;
            node1 = (ClassNode)e.Link.Origin.Id;
            node2 = (ClassNode)e.Link.Destination.Id;
            curnode = node1;
            if (AllParent(curnode, node2))
            {
                MessageBox.Show("Зацикливание!!!");
                diagram1.Links.Remove(e.Link);
            }
            else
            {
                ((ClassNode)e.Link.Origin.Id).LstNodes.Add((ClassNode)e.Link.Destination.Id);
                ((ClassNode)e.Link.Destination.Id).LstParent.Add((ClassNode)e.Link.Origin.Id);
                e.Link.AllowMoveEnd = false;
                e.Link.AllowMoveStart = false;
                //Саша-сделать надпись над ссылкой-очерёдность
                e.Link.TextStyle = LinkTextStyle.Center;
                int y = ((ClassNode)e.Link.Origin.Id).LstNodes.Count;
                e.Link.Text = "#" + y.ToString();
                //Саша-проверка того, что дуга выходит не из вершины-действия
                if (node1.TypeN == TypeNode.Action)
                {
                    MessageBox.Show("Действия ни на что не ссылаются!");
                    diagram2.Links.Remove(e.Link);
                }
                else
                {
                    DiagramLink link = new DiagramLink(diagram1, GetIconNodeById((ClassNode)e.Link.Origin.Id), GetIconNodeById((ClassNode)e.Link.Destination.Id));
                    link.Id = e.Link;
                    link.Text = "#" + y.ToString();
                    diagram1.Links.Add(link);
                }
                RebuildTaxonScen();
            }
            SS.IsSaved = false;

        }

        private void diagram2_LinkDeleted(object sender, LinkEventArgs e)
        {

            //diagram1_LinkDeleted(sender, e);
            if ((string)e.Link.Destination.Tag == "ClassNode" && (string)e.Link.Origin.Tag == "ClassNode")
            {
                ((ClassNode)e.Link.Origin.Id).LstNodes.Remove((ClassNode)e.Link.Destination.Id);
                ((ClassNode)e.Link.Destination.Id).LstParent.Remove((ClassNode)e.Link.Origin.Id);
            }
            if (e.Link.Origin.Tag == "ClassNode")
            {
                IconNode io = GetIconNodeById((ClassNode)e.Link.Origin.Id);
                if ((string)e.Link.Origin.Tag == "ClassNode" && io != null)
                    foreach (DiagramLink item in io.GetAllLinks())
                        if ((DiagramLink)item.Id == e.Link)
                            diagram1.Links.Remove(item);
            }
            RebuildTaxonScen();
            SS.IsSaved = false;
        }

        private void diagram2_LinkDeleting(object sender, LinkValidationEventArgs e)
        {

            if (!(toolStripButton_RedactSS.Checked || toolStripButton_Pointer.Checked) || tabControl1.SelectedIndex == 1)
                e.Cancel = true;
            if (MessageBox.Show("Вы действительно хотите удалить эту ссылку?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
             == DialogResult.No)
            {
                e.Cancel = true;
            }
            //if ((string)e.Link.Origin.Tag == "ClassCase" || (string)e.Link.Destination.Tag == "ClassCase")
            //    e.Cancel = true;
        }

        private void diagram2_NodeDeleting(object sender, NodeValidationEventArgs e)
        {
            if (!(toolStripButton_RedactSS.Checked || toolStripButton_Pointer.Checked) || tabControl1.SelectedIndex == 1)
                return;
            if (e.Node.Tag == "ClassCase")
            {
                MessageBox.Show("Удаление акторов запрещено.");
                e.Cancel = true;
                return;
            }
            if (MessageBox.Show("Вы действительно хотите удалить эту вершину?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
             == DialogResult.Yes)
            {
                if (((ClassNode)e.Node.Id).TypeN == TypeNode.Action)
                {
                    DiagramLinkCollection allLink = e.Node.GetAllLinks();
                    foreach (DiagramLink item in allLink)
                    {
                        if (item.Destination.GetAllLinks().Count == 1)
                        {
                            diagram2.Nodes.Remove(item.Destination);
                        }
                        diagram2.Links.Remove(item);
                    }
                }
                diagram1.Nodes.Remove(GetIconNodeById((ClassNode)e.Node.Id));
                SS.LstNodes.Remove((ClassNode)e.Node.Id);
                RebuildTaxonScen();
                SS.IsSaved = false;
            }
            else
            {
                e.Cancel = true;
            }

        }
        //Саша-для контекстного меню для ссылки 3.04 begin
        public DiagramLink currentSelectedLink = null;
        private void diagram1_LinkClicked(object sender, LinkEventArgs e)
        {
            if (login == "admin" && password == "admin")
            {
                if (e.MouseButton == MouseButton.Right)
                {
                    currentSelectedLink = e.Link;
                    int x = (int)Math.Round((decimal)Cursor.Position.X);
                    int y = (int)Math.Round((decimal)Cursor.Position.Y);
                    Point p = new Point(x, y);
                    // ct.Show(p);
                    contextMenuStripLink.Show(p);
                }
            }
            else
            {
                MessageBox.Show("Вы не обладаете правами администратора!", "Ошибка",
                              MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void удалитьToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Вы действительно хотите удалить эту ссылку?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
              == DialogResult.Yes)
            {
                textBoxLegend.Text = "";
                ((ClassNode)currentSelectedLink.Origin.Id).LstNodes.Remove((ClassNode)currentSelectedLink.Destination.Id);
                ((ClassNode)currentSelectedLink.Destination.Id).LstParent.Remove((ClassNode)currentSelectedLink.Origin.Id);

                if (tabControl1.SelectedIndex == 1)
                    diagram1.Links.Remove((DiagramLink)currentSelectedLink);
                else
                {
                    diagram2.Links.Remove((DiagramLink)currentSelectedLink);
                    foreach (DiagramLink item in GetIconNodeById((ClassNode)currentSelectedLink.Origin.Id).GetAllLinks())
                        if ((DiagramLink)item.Id == currentSelectedLink)
                            diagram1.Links.Remove(item);
                }
                diagramView1.Refresh();
                RebuildTaxonScen();
                SS.IsSaved = false;
            }
        }

        private void изменитьНомерToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ChangeNumber forma = new ChangeNumber(this);
            forma.ShowDialog();

            if (forma.DialogResult == DialogResult.OK)
            {
                int y = 1;
                foreach (ClassNode item in ((ClassNode)currentSelectedLink.Origin.Id).LstNodes)
                {
                    foreach (DiagramLink ll in diagram1.Links)
                    {
                        if (ll.Origin.Id == currentSelectedLink.Origin.Id && (ClassNode)ll.Destination.Id == item)
                        {
                            ll.Text = "#" + y.ToString();
                            ((DiagramLink)ll.Id).Text = "#" + y.ToString();
                        }
                    }
                    y++;

                }
                diagramView1.Refresh();
                RebuildTaxonScen();
            }
        }

        private void изменитьКонечнуюВершинуToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (tabControl1.SelectedIndex == 2)
                currentSelectedLink.Id = GetLinkFromD1(currentSelectedLink);
            ChangeOrigin_Destination forma = new ChangeOrigin_Destination(this, 2);
            forma.ShowDialog();
            if (forma.DialogResult == DialogResult.OK)
            {
                diagramView1.Refresh();
                MessageBox.Show("Конечная вершина изменена");
            }
            RebuildTaxonScen();
        }

        private void изменитьНачальнуюВершинуToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (tabControl1.SelectedIndex == 2)
                currentSelectedLink.Id = GetLinkFromD1(currentSelectedLink);
            ChangeOrigin_Destination forma = new ChangeOrigin_Destination(this, 1);
            forma.ShowDialog();
            if (forma.DialogResult == DialogResult.OK)
            {
                diagramView1.Refresh();
                MessageBox.Show("Начальная вершина изменена");
            }
            RebuildTaxonScen();
        }

        private DiagramLink GetLinkFromD1(DiagramLink Linkd2)
        {
            foreach (DiagramLink item in diagram1.Links)
            {
                if ((DiagramLink)item.Id == Linkd2)
                    return item;
            }
            return null;
        }

        //from Irene - start, 4.04//
        private void добавитьВершинуToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DiagramEventArgs ea = new DiagramEventArgs(MouseButton.Left, new PointF(x_contextd2, y_contextd2));
            diagram2_Clicked(new object(), ea);
        }

        private void увеличитьToolStripMenuItem_SelectedIndexChanged(object sender, EventArgs e)
        {
            short[] zooms = new short[] { 25, 50, 75, 100, 125, 150, 175, 200 };

            if (увеличитьToolStripMenuItem.SelectedIndex == -1)
                return;

            diagramView2.ZoomFactor = zooms[увеличитьToolStripMenuItem.SelectedIndex];
            toolStripComboBox_Zoom.SelectedIndex = увеличитьToolStripMenuItem.SelectedIndex;
            contextMenuStrip_Diagram2.Close();
        }

        private void указательToolStripMenuItem_Click(object sender, EventArgs e)
        {
            toolStripButton_Hand.Checked = false;
            toolStripButton_Pointer.Checked = true;
            toolStripButton_RedactSS.Checked = false;
            diagramView2.Behavior = Behavior.Modify;
        }

        private void просмотрToolStripMenuItem_Click(object sender, EventArgs e)
        {
            toolStripButton_Pointer.Checked = false;
            toolStripButton_Hand.Checked = true;
            toolStripButton_RedactSS.Checked = false;
            diagramView2.Behavior = Behavior.Pan;
        }

        private void редактированиеToolStripMenuItem_Click(object sender, EventArgs e)
        {
            toolStripButton_Pointer.Checked = false;
            toolStripButton_RedactSS.Checked = true;
            toolStripButton_Hand.Checked = false;
            diagramView2.Behavior = Behavior.DrawLinks;
        }

        private void удалитьToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            if (tabControl1.SelectedIndex == 1)
            {
                if (MessageBox.Show("Вы действительно хотите удалить эту вершину?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
              == DialogResult.Yes)
                {
                    SS.LstNodes.Remove(currentNodeCN);
                    diagram1.Nodes.Remove(currentDNode);
                    //SS.IsSaved = false;
                    //Сашка, это место для тебя)))))
                }
            }
            else
            {
                if (CurrentD2Node.Tag == "ClassCase")
                {
                    MessageBox.Show("Удаление акторов запрещено...");
                    return;
                }
                // if (MessageBox.Show("Подтвердите операцию.", "Удаление вершины", MessageBoxButtons.YesNo) == DialogResult.Yes)
                //  {
                diagram2_NodeDeleting(new object(), new NodeValidationEventArgs(CurrentD2Node));
                // }
            }
            RebuildTaxonScen();

        }

        private void diagram2_LinkClicked(object sender, LinkEventArgs e)
        {
            if (!(toolStripButton_RedactSS.Checked || toolStripButton_Pointer.Checked))
                return;
            if (login == "admin" && password == "admin")
            {
                if (e.MouseButton == MouseButton.Right)
                {
                    currentSelectedLink = e.Link;
                    if (currentSelectedLink.Destination.Tag == "ClassCase")
                    {
                        MessageBox.Show("Работа со связями акторов запрещена...");
                        return;
                    }
                    int x = (int)Math.Round((decimal)Cursor.Position.X);
                    int y = (int)Math.Round((decimal)Cursor.Position.Y);
                    Point p = new Point(x, y);
                    // ct.Show(p);
                    contextMenuStripLink.Show(p);
                }
            }
            else
            {
                MessageBox.Show("Вы не обладаете правами администратора!", "Ошибка",
                           MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        //Саша-12.04-добавление новой роли

        private void btnAddRol_Click(object sender, EventArgs e)
        {
            Add_Change_Taxonomia forma = new Add_Change_Taxonomia(1, this, null, null);
            forma.ShowDialog();
            if (forma.DialogResult == DialogResult.OK)
            {
                MessageBox.Show("Роль добавлена");
                treeViewTaxonomia.Nodes.Add(SS.Taxon.Roles[SS.Taxon.Roles.Count - 1].Name);
                treeViewTaxonomia.ExpandAll();
                SS.IsSaved = false;
            }
        }
        public string nameRole;
        private void btnChangeRol_Click(object sender, EventArgs e)
        {
            if (CurrentNodeTreeview != null && CurrentNodeTreeview.Level == 0)
            {
                nameRole = SS.Taxon.GetRole(CurrentNodeTreeview.Text).Name;
                Add_Change_Taxonomia forma = new Add_Change_Taxonomia(2, this, nameRole, null);
                forma.ShowDialog();
                if (forma.DialogResult == DialogResult.OK)
                {
                    MessageBox.Show("Роль изменена");
                    CurrentNodeTreeview.Text = SS.Taxon.Roles[SS.Taxon.Roles.Count - 1].Name;
                    treeViewTaxonomia.ExpandAll();
                    SS.IsSaved = false;
                }
            }
            else
            {
                MessageBox.Show("вы не выделили роль!");
                return;
            }

        }

        private void btnDelRol_Click(object sender, EventArgs e)
        {
            string nameRole = CurrentNodeTreeview.Text;
            if (MessageBox.Show("Вы действительно хотите удалить эту роль?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
               == DialogResult.Yes)
            {
                Role rr = SS.Taxon.GetRole(nameRole);
                if (!SS.Taxon.DelRole(nameRole))
                {
                    MessageBox.Show("Сбой при удалении");
                    return;
                }
                TreeNode noddee = null;
                foreach (TreeNode item in treeViewTaxonomia.Nodes)
                {
                    if (item.Text == nameRole)
                    {
                        noddee = item;
                        break;
                    }

                }

                treeViewTaxonomia.Nodes.Remove(noddee);
                SS.Taxon.Roles.Remove(rr);
                treeViewTaxonomia.ExpandAll();
                SS.IsSaved = false;
            }
        }

        public TreeNode CurrentNodeTreeview = null;
        public TreeNode CurrentParentHeroTreeview = null;
        private void treeViewTaxonomia_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            //Саша-5.11.2011-изменение прав доступа
            if (e.Button.ToString() == MouseButton.Right.ToString())
            {
                int x = (int)Math.Round((decimal)Cursor.Position.X);
                int y = (int)Math.Round((decimal)Cursor.Position.Y);
                Point p = new Point(x, y);
                CurrentNodeTreeview = e.Node;
                if (e.Node.Level == 0)
                {
                    CurrentParentHeroTreeview = e.Node;
                    nameRole = e.Node.Text;
                    contextMenuStripTaxonomia.Show(p);
                }
                else
                {
                    roleparent = e.Node.Parent.Text;
                    contextMenuStripHeroys.Show(p);
                }
            }
            CurrentNodeTreeview = e.Node;
        }

        private void добавитьРольToolStripMenuItem_Click(object sender, EventArgs e)
        {
            btnAddRol_Click(new object(), null);
        }

        private void изменитьРольToolStripMenuItem_Click(object sender, EventArgs e)
        {
            btnChangeRol_Click(new object(), null);
        }

        private void удалитьРольToolStripMenuItem_Click(object sender, EventArgs e)
        {
            btnDelRol_Click(new object(), null);
        }

        private void добавитьНазваниеГерояToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Add_Change_Taxonomia forma = new Add_Change_Taxonomia(3, this, nameRole, null);
            forma.ShowDialog();
            if (forma.DialogResult == DialogResult.OK)
            {
                MessageBox.Show("Название героя добавлено");
                TreeNode tr = new TreeNode(SS.Taxon.Roles[CurrentNodeTreeview.Index].Heroes[SS.Taxon.Roles[CurrentNodeTreeview.Index].Heroes.Count - 1]);
                CurrentNodeTreeview.Nodes.Add(tr);
                treeViewTaxonomia.Update();
                treeViewTaxonomia.ExpandAll();
                SS.IsSaved = false;
            }
        }
        public string roleparent = null;
        private void добавитьГерояToolStripMenuItem_Click(object sender, EventArgs e)
        {

            Add_Change_Taxonomia forma = new Add_Change_Taxonomia(4, this, roleparent, null);
            forma.ShowDialog();
            if (forma.DialogResult == DialogResult.OK)
            {
                MessageBox.Show("Название героя добавлено");
                TreeNode tr = new TreeNode(SS.Taxon.Roles[CurrentNodeTreeview.Index].Heroes[SS.Taxon.Roles[CurrentNodeTreeview.Index].Heroes.Count - 1]);
                CurrentParentHeroTreeview.Nodes.Add(tr);
                treeViewTaxonomia.Update();
                treeViewTaxonomia.ExpandAll();
                SS.IsSaved = false;
            }
        }

        private void изменитьНазваниеГерояToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int index = 0;
            int cc = 0;
            string namehero = CurrentNodeTreeview.Text.ToString();
            foreach (string item in SS.Taxon.GetRole(roleparent).Heroes)
            {
                if (item == namehero)
                {
                    index = cc;
                    break;
                }
                cc++;
            }
            Add_Change_Taxonomia forma = new Add_Change_Taxonomia(5, this, roleparent, namehero);
            forma.ShowDialog();
            if (forma.DialogResult == DialogResult.OK)
            {
                MessageBox.Show("Название героя изменено");
                string newname = SS.Taxon.GetRole(roleparent).Heroes[index];
                CurrentNodeTreeview.Text = newname;
                treeViewTaxonomia.Update();
                treeViewTaxonomia.ExpandAll();
                SS.IsSaved = false;
            }
        }

        private void удалитьГерояToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Вы действительно хотите удалить этого героя?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
              == DialogResult.Yes)
            {
                Role rr = SS.Taxon.GetRole(roleparent);
                rr.Heroes.Remove(CurrentNodeTreeview.Text);
                TreeNode noddee = null;
                foreach (TreeNode item in treeViewTaxonomia.Nodes)
                {
                    if (item.Text == roleparent)
                    {
                        noddee = item;
                        break;
                    }

                }

                TreeNode hghg = null;
                foreach (TreeNode item in noddee.Nodes)
                {
                    if (item.Text == CurrentNodeTreeview.Text)
                    {
                        hghg = item;
                        break;
                    }

                }
                treeViewTaxonomia.Nodes.Remove(hghg);
                treeViewTaxonomia.ExpandAll();
                SS.IsSaved = false;
            }
        }

        private void panel1_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button.ToString() == MouseButton.Right.ToString())
            {
                int x = (int)Math.Round((decimal)Cursor.Position.X);
                int y = (int)Math.Round((decimal)Cursor.Position.Y);
                Point p = new Point(x, y);
                contextMenuStripTaxonomia.Items[contextMenuStripTaxonomia.Items.Count - 1].Enabled = false;
                contextMenuStripTaxonomia.Show(p);

            }
        }


        private void diagram1_NodeDeleting(object sender, NodeValidationEventArgs e)
        {
            if (MessageBox.Show("Вы действительно хотите удалить эту вершину?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
             == DialogResult.No)
            {
                e.Cancel = true;
            }

        }

        private void diagram1_LinkDeleting(object sender, LinkValidationEventArgs e)
        {
            if (MessageBox.Show("Вы действительно хотите удалить эту ссылку?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
             == DialogResult.No)
            {
                e.Cancel = true;
            }
        }

        private void toolStripMenuItem2_Click(object sender, EventArgs e)
        {
            if (!SS.IsSaved)
            {

                DialogResult IsClaimSave = MessageBox.Show("Сохранить текущую семантическую сеть?", "Внимание!",
                    MessageBoxButtons.YesNo, MessageBoxIcon.Information);

                if (IsClaimSave == DialogResult.Yes)
                {
                    if (SS.FileName == "")
                    {
                        SaveFileDialog sfd = new SaveFileDialog { Filter = @"Семантическая сеть|*.sn" };
                        sfd.InitialDirectory = Application.StartupPath;
                        if (sfd.ShowDialog() == DialogResult.OK)
                            SS.FileName = sfd.FileName;
                        else return;
                    }
                    if (!SerializeToFile(SS.FileName))
                        return;//произошла ошибка при сериализации=>отменяем всю операцию
                }
            }
            SS.Clear();
            OpenFileDialog ofdial = new OpenFileDialog { Filter = @"Текст сказки|*.txt" };
            ofdial.InitialDirectory = Application.StartupPath;
            if (ofdial.ShowDialog() != DialogResult.OK)
                return;
            SS = new Analisator(ofdial.FileName).GetSN();
            SS.FileName = "";
            //SS.FileName = ofdial.FileName;
            SS.IsSaved = false;
            if (SS != null)
                VisualFromStructure();
        }

        private void просмотрСправкиToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // System.Diagnostics.Process.Start(Application.StartupPath + "\\Ft.chm");
            System.Diagnostics.Process.Start(Application.StartupPath + "\\ourhelp.chm");
        }

        private void treeViewTaxonomia_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Delete)
            {
                if (CurrentNodeTreeview != null)
                {
                    if (treeViewTaxonomia.SelectedNode.Level == 0)
                        btnDelRol_Click(new object(), null);
                    else
                        удалитьГерояToolStripMenuItem_Click(new object(), null);
                }
            }
        }

        /// <summary>
        /// Автоматическая расстановка
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void AutoLayout(object sender, EventArgs e)
        {
            var springLayout = new SpringLayout
            {
                NodeDistance = 90,
                IterationCount = 5000,
                Margins = new SizeF(0, 0)
            };

            springLayout.Progress = ProgressBarUpdate;
            // arrange the flowchart
            //Ирина.s - 26.04
            if (tabControl1.SelectedIndex == 1)
            {
                diagram1.RoutingOptions.CrossingCost = 50;
                springLayout.Arrange(diagram1);
                diagram1.ResizeToFitItems(40);
                var r = diagram1.Bounds;
                r.Inflate(5, 5);
                diagram1.Bounds = r;
                diagramView1.ZoomToRect(r);
            }
            else
            {
                //short[] zooms = new short[] { 25, 50, 75, 100, 125, 150, 175, 200 };
                //diagramView1.ZoomFactor = zooms[увеличитьtoolStripComboBox1.SelectedIndex];
                diagram2.RoutingOptions.CrossingCost = 50;
                springLayout.Arrange(diagram2);
                diagram2.ResizeToFitItems(40);
                var r = diagram2.Bounds;
                r.Inflate(5, 5);
                diagram2.Bounds = r;
                diagramView2.ZoomToRect(r);

                //toolStripComboBox_Zoom.SelectedItem = zooms.First(delegate(short p)
                //{
                //    if (p == diagramView2.ZoomFactor)
                //        return true;
                //    else return false;
                //});
            }
            //Ирина.e - 26.04
        }

        /// <summary>
        /// Перерисовка состояния Progress-Bar
        /// </summary>
        /// <param name="progress"></param>
        /// <param name="maxProgress"></param>
        private void ProgressBarUpdate(int progress, int maxProgress)
        {
            toolStripProgressBar2.Maximum = maxProgress;
            toolStripProgressBar2.Value = progress;
            if (maxProgress == progress)
            {
                toolStripProgressBar2.Value = 0;
                toolStripProgressBar2.Visible = false;
            }
            else
                toolStripProgressBar2.Visible = true;
        }
        public PointF currentMousePosition;
        private void добавитьВершинуToolStripMenuItem1_Click(object sender, EventArgs e)
        {

            lstStatus.Items.Clear();
            textBoxLegend.Text = "Идёт создание новой вершины";
            lstStatus.Items.Add("Создание новой вершины...");
            //Саша-в форму передаём ещё несколько параметров
            AddChangeNode form1 = new AddChangeNode(this, false, currentNodeCN, currentDNode, currentMousePosition.X, currentMousePosition.Y);
            form1.Tag = SS;
            //Саша-чтобы форма появлялась рядом с кликом 2.04
            int xx = (int)Math.Round((decimal)Cursor.Position.X);
            int yy = (int)Math.Round((decimal)Cursor.Position.Y);
            Point pp = new Point(xx, yy);
            form1.Location = pp;
            //Саша-конец 2.04
            form1.ShowDialog();
            //if (form1.DialogResult == DialogResult.Cancel)
            //diagram1.Nodes.Remove(iconNode);
            Bitmap tempImage = new Bitmap(1, 1);
            Graphics graphics = Graphics.FromImage(tempImage);
            MindFusion.Drawing.IGraphics measureGraphics = new GdiGraphics(graphics);
            if (form1.DialogResult == DialogResult.OK)
            {
                IconNode iconNode;
                if (SS.LstNodes[SS.LstNodes.Count - 1].TypeN == TypeNode.Scene)
                {
                    IconNode iconN = new IconNode();
                    iconN.Text = "Сцена - " + SS.LstNodes[SS.LstNodes.Count - 1].Name.ToString();
                    iconN.ResizeToFitText(FitSize.KeepRatio);
                    SizeF textSize = measureGraphics.MeasureString(iconN.Text, iconN.Font/*,int.MaxValue,iconN.TextFormat*/);
                    iconNode = new IconNode(diagram1, Color.Red, textSize);
                    iconNode.ToolTip = "Сцена - " + SS.LstNodes[SS.LstNodes.Count - 1].Name.ToString();
                    iconNode.Text = "Сцена - " + SS.LstNodes[SS.LstNodes.Count - 1].Name.ToString();
                    iconNode.ResizeToFitText(FitSize.KeepRatio);
                }
                else
                {
                    IconNode iconN = new IconNode();
                    iconN.Text = "Действие - " + SS.LstNodes[SS.LstNodes.Count - 1].CaseFrame.ToDo.Name.ToString();
                    iconN.ResizeToFitText(FitSize.KeepRatio);
                    SizeF textSize = measureGraphics.MeasureString(iconN.Text, iconN.Font);
                    iconNode = new IconNode(diagram1, Color.Green, textSize);
                    iconNode.ToolTip = "Действие - " + SS.LstNodes[SS.LstNodes.Count - 1].CaseFrame.ToDo.Name.ToString();
                    iconNode.Text = "Действие - " + SS.LstNodes[SS.LstNodes.Count - 1].CaseFrame.ToDo.Name.ToString();
                    iconNode.ResizeToFitText(FitSize.KeepRatio);
                }
                diagram1.Nodes.Add(iconNode);
                iconNode.Move(currentMousePosition.X, currentMousePosition.Y);
                iconNode.Id = SS.LstNodes[SS.LstNodes.Count - 1];
                SS.LstNodes[SS.LstNodes.Count - 1].X = SS.LstNodes[SS.LstNodes.Count - 1].X_d2 = currentMousePosition.X;
                SS.LstNodes[SS.LstNodes.Count - 1].Y = SS.LstNodes[SS.LstNodes.Count - 1].Y_d2 = currentMousePosition.Y;
                //на вторую диаграмму
                Add_to_LookDiagram(SS.LstNodes[SS.LstNodes.Count - 1]);
            }
            lstStatus.Items.Clear();
            textBoxLegend.Text = "Просмотр сети";
            lstStatus.Items.Add("Просмотр сети...");
            RebuildTaxonScen();
            SS.IsSaved = false;
        }

        private void увеличитьtoolStripComboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            short[] zooms = new short[] { 25, 50, 75, 100, 125, 150, 175, 200 };

            if (увеличитьtoolStripComboBox1.SelectedIndex == -1)
                return;

            diagramView1.ZoomFactor = zooms[увеличитьtoolStripComboBox1.SelectedIndex];
            //toolStripComboBox_Zoom.SelectedIndex = увеличитьToolStripMenuItem.SelectedIndex;
            contextMenuStripDiagram1.Close();
        }


        //private void treeViewTaxonomia_MouseClick(object sender, MouseEventArgs e)
        //{
        //    if (e.Button.ToString() == MouseButton.Right.ToString())
        //    {
        //        int x = (int)Math.Round((decimal)Cursor.Position.X);
        //        int y = (int)Math.Round((decimal)Cursor.Position.Y);
        //        Point p = new Point(x, y);
        //        contextMenuStripTaxonomia.Items[contextMenuStripTaxonomia.Items.Count - 1].Enabled = false;
        //        contextMenuStripTaxonomia.Show(p);

        //    }
        //}

        //private void treeViewTaxonomia_Click(object sender, EventArgs e)
        //{
        //    int i = 0;
        //}

        //private void contextMenuStripTaxonomia_MouseClick(object sender, MouseEventArgs e)
        //{
        //    if (e.Button.ToString() == MouseButton.Right.ToString())
        //    {
        //        int x = (int)Math.Round((decimal)Cursor.Position.X);
        //        int y = (int)Math.Round((decimal)Cursor.Position.Y);
        //        Point p = new Point(x, y);
        //        contextMenuStripTaxonomia.Items[contextMenuStripTaxonomia.Items.Count - 1].Enabled = false;
        //        contextMenuStripTaxonomia.Show(p);

        //    }
        //}
        //Саша-12.04


        //from Irene - end, 4.04//

        //========================XML сериализация в файл============================================================================


        /*private void button1_Click(object sender, EventArgs e)
        {
            button1.Enabled = false;
            MLV myMLV= new MLV();
            myMLV.MainScene = SS;
            myMLV.GoRoundOfScene(SS.Name);
            textBox1.Text = myMLV.Fairytale;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            button2.Enabled = false;
            button1.Enabled = true;
            List<ClassNode> lst = new List<ClassNode>();
            lst.Add(new ClassNode(TypeNode.Action));
            lst[lst.Count - 1].Name = "1";
            lst[lst.Count - 1].CaseFrame = new ClassCaseFrame();
            lst[lst.Count - 1].CaseFrame.Agent = new ClassCase();
            lst[lst.Count - 1].CaseFrame.Agent.Name = "царь и сыновья";
            lst[lst.Count - 1].CaseFrame.Lokotiv = new ClassCase();
            lst[lst.Count - 1].CaseFrame.Lokotiv.Name = "во дворце";
            lst[lst.Count - 1].CaseFrame.ToDo = new ClassCase();
            lst[lst.Count - 1].CaseFrame.ToDo.Name = "жили-поживали";
            lst[lst.Count - 1].CaseFrame.Time = new ClassCase();
            lst[lst.Count - 1].CaseFrame.Time.Name = "многие лета назад";
            lst.Add(new ClassNode(TypeNode.Action));
            lst[lst.Count - 1].Name = "2";
            lst[lst.Count - 1].CaseFrame = new ClassCaseFrame();
            lst[lst.Count - 1].CaseFrame.Agent = new ClassCase();
            lst[lst.Count - 1].CaseFrame.Agent.Name = "три сына";
            lst[lst.Count - 1].CaseFrame.Recipient = new ClassCase();
            lst[lst.Count - 1].CaseFrame.Recipient.Name = "у него";
            lst[lst.Count - 1].CaseFrame.ToDo = new ClassCase();
            lst[lst.Count - 1].CaseFrame.ToDo.Name = "было";
            SS = new ClassNode(TypeNode.Scene);
            SS.Name = "Пролог";
            SS.LstNodes = lst;

            listBox1.Items.Clear();
            listBox1.Items.Add(SS.Name+"__"+SS.TypeN.ToString());
            listBox1.Items.Add(SS.LstNodes[0].Name + "__" + SS.LstNodes[0].TypeN.ToString());
            listBox1.Items.Add(SS.LstNodes[1].Name + "__" + SS.LstNodes[1].TypeN.ToString());
        }*/
    }
}
